package com.czg.jsonschema2lombokpojo.rules;

import com.czg.jsonschema2lombokpojo.Schema;

import com.fasterxml.jackson.databind.JsonNode;
import com.sun.codemodel.JType;

/**
 * <p>
 * 应用“media”超schema规则。
 * </p>
 *
 * @author Christian Trimble
 * @since 0.4.2
 */
public class MediaRule implements Rule<JType, JType> {

    private static final String BINARY_ENCODING = "binaryEncoding";

    /**
     * <p>
     * 构建新的媒体规则。
     * </p>
     *
     * @since 0.4.2
     */
    protected MediaRule() {
    }

    /**
     * <p>
     * 应用此schema规则。
     * </p>
     *
     * @param nodeName
     *            属性的名称。
     * @param mediaNode
     *            媒体节点
     * @param parent
     *            父节点
     * @param baseType
     *            带有媒体节点的类型。这必须是java.lang.String。
     * @param schema
     *            包含属性的架构。
     * @return 当指定二进制编码时，使用byte[]，否则使用baseType。
     * @since 0.4.2
     */
    @Override
    public JType apply(String nodeName, JsonNode mediaNode, JsonNode parent, JType baseType, Schema schema) {
        if (!mediaNode.has(BINARY_ENCODING)) {
            return baseType;
        }

        return baseType.owner().ref(byte[].class);
    }
}
